home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / PowerD / powerd / examples / broker.d < prev    next >
Text File  |  2002-10-28  |  2KB  |  80 lines

  1. // broker.d - small example (originaly from broker.e) with comodities
  2.  
  3. MODULE    'commodities',
  4.             'dos/dos',
  5.             'exec/libraries',
  6.             'exec/ports',
  7.             'libraries/commodities'
  8.  
  9. ENUM    ERR_NONE, ERR_ARG, ERR_BRKR, ERR_CXERR, ERR_LIB, ERR_PORT
  10.  
  11. RAISE    ERR_BRKR IF CxBroker()=NIL,
  12.         ERR_LIB  IF OpenLibrary()=NIL,
  13.         ERR_PORT IF CreateMsgPort()=NIL
  14.     
  15. DEF    broker=NIL,broker_mp=NIL:PTR TO MP,cxsigflag,CXBase
  16.   
  17. PROC main()
  18.     DEF    msg
  19.     CXBase:=OpenLibrary('commodities.library', 37)
  20.     broker_mp:=CreateMsgPort()
  21.     broker:=CxBroker([
  22.         NB_VERSION,
  23.         'RKM broker',
  24.         'Broker',
  25.         'A simple example of a broker',
  26.         0,0,0,
  27.         broker_mp,
  28.         0]:NewBroker,NIL)
  29.  
  30.     cxsigflag:=1<<broker_mp.SigBit
  31.  
  32.     ActivateCxObj(broker,TRUE)
  33.  
  34.     PrintF('Try Exchange\n')
  35.  
  36.     ProcessMsg()
  37.  
  38. EXCEPTDO
  39.     IF broker THEN DeleteCxObj(broker)
  40.     IF broker_mp
  41.         WHILE msg:=GetMsg(broker_mp) DO ReplyMsg(msg)
  42.         DeleteMsgPort(broker_mp)
  43.     ENDIF
  44.     IF CXBase THEN CloseLibrary(CXBase)
  45.     SELECT exception
  46.     CASE ERR_BRKR;  PrintF('Error: Could not create broker\n')
  47.     CASE ERR_CXERR; PrintF('Error: Could not activate broker\n')
  48.     CASE ERR_LIB;   PrintF('Error: Could not open commodities.library\n')
  49.     CASE ERR_PORT;  PrintF('Error: Could not create message port\n')
  50.     ENDSELECT
  51. ENDPROC
  52.  
  53. PROC ProcessMsg()
  54.     DEF    msg,sigrcvd,msgid,msgtype,done=FALSE
  55.     REPEAT
  56.         sigrcvd:=Wait(cxsigflag|SIGBREAKF_CTRL_C)
  57.         
  58.         WHILE msg:=GetMsg(broker_mp)
  59.             msgid:=CxMsgID(msg)
  60.             msgtype:=CxMsgType(msg)
  61.             ReplyMsg(msg)
  62.             SELECT msgtype
  63.             CASE CXM_IEVENT
  64.             CASE CXM_COMMAND
  65.                 PrintF('A command: ')
  66.                 SELECT msgid
  67.                 CASE CXCMD_DISABLE;    PrintF('CXCMD_DISABLE\n');    ActivateCxObj(broker,FALSE)
  68.                 CASE CXCMD_ENABLE;    PrintF('CXCMD_ENABLE\n');    ActivateCxObj(broker,TRUE)
  69.                 CASE CXCMD_KILL;        PrintF('CXCMD_KILL\n');        done:=TRUE
  70.                 ENDSELECT
  71.             DEFAULT;                        PrintF('Unknown msgtype\n')
  72.             ENDSELECT
  73.         ENDWHILE
  74.         IF sigrcvd&SIGBREAKF_CTRL_C
  75.             done:=TRUE
  76.             PrintF('CTRL C signal break\n')
  77.         ENDIF
  78.     UNTIL done
  79. ENDPROC
  80.